package org.huawei260.TiKu.ODsuanfa;

/**
 * @Author: qingle
 * @Date: 2024/10/28-16:11
 * @Description: 3804 【回溯】2024E找到它
 *
 * 到它是一个小游戏，你需要在一个矩阵中找到给定的单词。
 * 假设给定单词 HELLOWORD，在矩阵中只要能找到
 * H->E->L->L->O->W->O->R->L->D连成的单词，就算通过。
 * 注意区分英文字母大小写，并且您只能上下左右行走，不能走回头路。
 * 输入描述
 * 输入第 1 行包含两个整数 n、m (0 < n,m < 21) 分别表示 n 行 m 列的矩阵，
 * 第 2 行是长度不超过100的单词 W (在整个矩阵中给定单词 W 只会出现一次)，
 * 从第 3 行到第 n+2 行是指包含大小写英文字母的长度为 m 的字符串矩阵。
 * 输出描述
 * 如果能在矩阵中连成给定的单词，则输出给定单词首字母在矩阵中的位置(第几行 第几列)，
 *
 *
 * @version: 1.0
 */
import java.util.Scanner;
public class E_2024E_3804__回溯找到它 {

//	public class Main {
		static String[] matrix;
		static String word;
		static int n;
		static int m;
		static boolean[][] visited;

		public static void main(String[] args) {
			Scanner sc = new Scanner(System.in);

			n = sc.nextInt();
			m = sc.nextInt();

			word = sc.next();

			matrix = new String[n];
			for (int i = 0; i < n; i++) {
				matrix[i] = sc.next();
			}

			System.out.println(getResult());
		}

		public static String getResult() {
			visited = new boolean[n][m];

			for (int i = 0; i < n; i++) {
				for (int j = 0; j < m; j++) {
					if (backTracking(i, j, 0)) {
						return (i + 1) + " " + (j + 1);
					}
				}
			}

			return "NO";
		}

		public static boolean backTracking(int i, int j, int k) {
			if (k == word.length()) return true;

			if (i < 0
				|| i >= n
				|| j < 0
				|| j >= m
				|| visited[i][j]
				|| matrix[i].charAt(j) != word.charAt(k)) {
				return false;
			}

			visited[i][j] = true;

			int newK = k + 1;
			boolean res =
				backTracking(i - 1, j, newK)
					|| backTracking(i + 1, j, newK)
					|| backTracking(i, j - 1, newK)
					|| backTracking(i, j + 1, newK);

			visited[i][j] = false;
			return res;
		}
	}